package xkp.lesson;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestAnymosClass {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //1、匿名内部类也是一个类
        //2、但是这个类没有名称
        //3、什么时候用  匿名内部类的特性决定了这个类型临时存在
        //此处使用匿名内部类new创建了一个对象，这个对象的run方法执行
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("我是执行任务");
            }
        };
        //如果我在此处能不能再使用上面的类
        //加入想要使用上面的类 起码要知道类名称
   /*     Runnable runnable2 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我是执行任务");
            }
        };*/


        Thread thread = new Thread(){
            @Override
            public void run() {
                System.out.println("我是执行任务");
            }
        };

        //父类指向子类，只能调用父类资源
        //thread.start();

        Runnable runnable2 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我是执行任务");
            }
        };
        //如果该接口同时满足函数式接口，可以使用Lambda优化
        Runnable r = ()-> System.out.println("我是执行任务,Lambda。。。。");
        //1、通过反射可以获取匿名内部类对象方法
        //2、不能通过类名称获取

        //1、获取Class对象的三种方式
        //Class.forName("类全类鸣");
        //通过类.class
        //通过对象.getClass()
        Class classObj = r.getClass();
        Method method = classObj.getMethod("run",null);
        //method.setAccessible(true);
        //执行对象的方法
        method.invoke(r,null);
    }
}
